#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 1e6+5;
int cnt[maxn], prefix[maxn];

void dfs(int dep, int cur, int mul, int sum){
	if (mul>1e6) {
		// 进行剪枝
		return;
	}
	if (dep==4) {
		cnt[mul]++;			
		return;
	}
	// 假设 前面的乘积是 mul, 后序还有 x, >x >>x, 那么后序有几个 x 呢 有 3-dep+1 即 4-dep 个
	// 所以 mul*(x^(4-dep) <= 1e6
	// x <= pow((1e6/mul), 1/(4-dep))
	int up = pow(1e6/mul, 1.0/(4-dep)) + 5; // 这个上限稍微宽松一点
	for (int i=cur+1;i < (dep==3?sum:up);i++) { // 记住 for 处理的就是当前层
		dfs(dep+1, i, mul*i, sum+i);
	}
}

void solve(){
	// 这里直接预处理完毕
	dfs(1, 0, 1, 0);
	for (int i=1;i<=1e6;i++) {
		prefix[i] = prefix[i-1] + cnt[i];
	}
	int q;
	int l, r;
	cin >> q;
	// 后序直接根据 处理过的数据拿结果
	while(q--){
		//TODO
		cin >> l >> r;
		cout << prefix[r]-prefix[l-1] << '\n';
	}
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
